perm filename PART16.TEX[105,CSD] blob sn#534470 filedate 1980-09-16 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	\sample
C00005 00003	\sample
C00009 00004	\sample
C00012 ENDMK
CāŠ—;
\sample
\sendnotes{Blank removing example}

\startcode
(****************************************************************)
(*                                                              *)
(*  REMOVING LEADING AND MULTIPLE BLANKS FROM A LINE OF TEXT    *)
(*                                                              *)
(****************************************************************)

PROGRAM KILLBLANKS ( INPUT*, OUTPUT ) ;

CONST   TABSIZE  = 60 ;
VAR     I, J, K   : INTEGER ;
        SOURCE,
        TARGET    : ARRAY[0..TABSIZE] OF CHAR ;
        (* INPUT AND OUTPUT LINES OF TEXT *)

BEGIN

(* READ INPUT LINE *)
FOR I := 1 TO TAB_SIZE DO  READ ( SOURCE[I] ) ;

(* INITIALIZE *)
SOURCE[0] := ' ' ;
I := 1 ;
J := 1 ;
\allowbreak
WHILE  I <= TABSIZE  DO
    BEGIN
    IF  ( SOURCE[ I-1 ] <> ' ' ) OR ( SOURCE[ I ] <> ' ' )  THEN
        BEGIN
        TARGET[J] := SOURCE[I] ;
        J := J + 1 
        END ;
    I := I + 1
    END;
\allowbreak
FOR K := J TO TABSIZE DO TARGET[K] := ' ' ;
\allowbreak
(* OUTPUT *)
FOR K := 1 TO TABSIZE DO  WRITE ( SOURCE[K] ) ;
WRITELN ;
FOR K := 1 TO TABSIZE DO  WRITE ( TARGET[K] ) 
END.
\endcode

\topoutput
   DRAGONRIDERS     MUST FLY    WHEN    THREADS  ARE  IN   THE SKY
DRAGONRIDERS MUST FLY WHEN THREADS ARE IN THE SKY
\botoutput
\sample

\startcode
(****************************************************************)
(*                                                              *)
(*  SEQUENTIAL TABLE LOOKUP IN THE OBVIOUS WAY.                 *)
(*                                                              *)
(****************************************************************)

PROGRAM LOOKUP ( INPUT*, OUTPUT ) ;

VAR     SEARCHNUM ,               
        I               : INTEGER ;

        TABLE           : ARRAY[1..11] OF INTEGER ;
               (* NOTE THAT WE MUST DECLARE THE ARRAY SIZE ONE    *)
               (* BIGGER THAN THE TABLE SIZE TO PREVENT THE INDEX *)
               (* FROM GOING OUT OF BOUNDS WHEN THE NUMBER WE'RE  *)
               (* LOOKING FOR IS NOT FOUND.                       *)

BEGIN
FOR I := 1 TO 10 DO  READ ( TABLE[I] ) ;
READ ( SEARCHNUM ) ;
I := 1 ;
WHILE ( TABLE[I] <> SEARCHNUM ) AND ( I <= 10 ) DO  I := I + 1 ;
IF I <= 10  THEN  WRITELN ( SEARCHNUM :4, ' FOUND AT POSITION', I :4 )
ELSE  WRITELN ( SEARCHNUM :4, ' NOT FOUND' ) 
END.
\endcode

\startcode
(****************************************************************)
(*                                                              *)
(*  SEQUENTIAL TABLE LOOKUP IN A CLEVER WAY                     *)
(*                                                              *)
(****************************************************************)

PROGRAM LOOKUP ( INPUT*, OUTPUT ) ;

VAR     SEARCHNUM,
        I             : INTEGER ;

        TABLE         : ARRAY[1..11] OF INTEGER ;
                (* NOTE THAT WE MUST DECLARE THE ARRAY SIZE ONE    *)
                (* BIGGER THAN THE TABLE SIZE TO PREVENT THE INDEX *)
                (* FROM GOING OUT OF BOUNDS WHEN THE NUMBER WE'RE  *)
                (* LOOKING FOR IS NOT FOUND.                       *)

BEGIN
FOR I := 1 TO 10 DO  READ ( TABLE[I] ) ;
READ ( SEARCHNUM ) ;
I := 1 ;
TABLE[11] := SEARCHNUM ;  (* GUARANTEES FINDING THE NUMBER IN ARRAY *)
WHILE  ( TABLE[I] <> SEARCHNUM ) DO  I := I + 1 ;
IF I <= 10 THEN  WRITELN ( SEARCHNUM :4, ' FOUND AT POSITION', I :4 )
ELSE  WRITELN ( SEARCHNUM :4, ' NOT FOUND' )
END.
/endcode
\sample
\sendnotes{procedure example}

\startcode
(**********************************************************************)
(*                                                                    *)
(*  THIS PROGRAM DEMONSTRATES THE USE OF PROCEDURES AND THE DIFFERENT *)
(*  WAYS OF COMMUNICATION BETWEEN THE CALLING PROGRAM AND A PROCEDURE *)
(*      1) NO COMMUNICATION AT ALL.                                   *)
(*      2) TWO WAY COMMUNICATION VIA GLOBAL VARIABLES.                *)
(*      3) ONE WAY COMMUNICATION VIA ( VALUE ) PARAMETERS.            *)
(*      4) TWO WAY COMMUNICATION VIA ( REFERENCE ) PARAMETERS.        *)
(*                                                                    *)
(**********************************************************************)

PROGRAM DEMOPROC (  OUTPUT ) ;

PROCEDURE WRITESTARS ;
VAR     I        : INTEGER ;

BEGIN
FOR I := 1 TO 12 DO WRITE ( '*' ) ;
WRITELN 
END ;  (* WRITESTARS *)

BEGIN  (* MAIN *)
WRITESTARS ;
WRITELN ( SQRT(2.0) ) ;
WRITESTARS
END.  (* MAIN *)
\endcode

\topoutput
************
 1.414213567
************
\botoutput

\startcode
PROGRAM DEMOPROC ( INPUT*, OUTPUT ) ;

VAR    N  : INTEGER ;

PROCEDURE WRITESTARS ;
VAR    I  : INTEGER ;

BEGIN
FOR I := 1 TO N DO  WRITE ( '*' ) ;
N := N + 2 ;
WRITELN
END ;  (* WRITESTARS *)

BEGIN  (* MAIN *)
READ ( N ) ;
WRITESTARS ;
WRITELN ( SQRT(2.0) ) ;
WRITESTARS
END.  (* MAIN *)
\endcode

\topoutput
************
 1.414213567
**************
\botoutput